﻿CREATE FUNCTION [Cucina].[TVF_Stats_VelocitaPuntoDistribuzione]
(
	@DataFine datetime,
	@FinestraWidth int,
	@NumeroFinestre int,
	@PuntoDistribuzioneID int
)
RETURNS 
	@ResultTable TABLE 
(
	InizioFascia datetime,
	FineFascia datetime,
	ComandeCreate int,
	ProdottiCreati int,
	ComandeDistribuite int,
	ProdottiDistribuiti int
)
AS
BEGIN
	IF (@FinestraWidth!=0)
	BEGIN
		DECLARE @DataCorrente datetime = DATEADD(minute, -@FinestraWidth*@NumeroFinestre, @DataFine)
		DECLARE @ComandeCreate int
		DECLARE @ProdottiCreati int
		DECLARE @ComandeDistr int
		DECLARE @ProdottiDistr int
		
		WHILE (@DataCorrente<@DataFine)
		BEGIN
			SELECT 
				@ComandeCreate = COUNT(DISTINCT C.ComandaID),
				@ProdottiCreati = COUNT(PC.ProdottiOrdinatiComandaID)
			FROM Cucina.Comanda C
			INNER JOIN Cucina.ProdottiOrdinatiComanda PC
				ON C.ComandaID = PC.ComandaID
			WHERE C.DataOra BETWEEN @DataCorrente AND DATEADD(minute, @FinestraWidth, @DataCorrente)
			AND C.PuntoDistribuzioneID = @PuntoDistribuzioneID
			
			SELECT
				@ComandeDistr = COUNT(DISTINCT CC.ComandaID),
				@ProdottiDistr = COUNT(PC.ProdottiOrdinatiComandaID)
			FROM Cucina.ComandaConsegna CC
			INNER JOIN Cucina.Comanda C
				ON CC.ComandaID = C.ComandaID
			INNER JOIN Cucina.ProdottiOrdinatiComanda PC
				ON C.ComandaID = PC.ComandaID
			WHERE CC.DataOra BETWEEN @DataCorrente AND DATEADD(minute, @FinestraWidth, @DataCorrente)
			AND C.PuntoDistribuzioneID = @PuntoDistribuzioneID
			
			INSERT INTO @ResultTable(InizioFascia, FineFascia, ComandeCreate, ProdottiCreati, ComandeDistribuite, ProdottiDistribuiti)
			VALUES(@DataCorrente, DATEADD(minute, @FinestraWidth, @DataCorrente), @ComandeCreate, @ProdottiCreati, @ComandeDistr, @ProdottiDistr)
			
			SET @DataCorrente = DATEADD(minute, @FinestraWidth, @DataCorrente)
		END
	END
	
	RETURN 
END
GO